package web_http

import (
	"net/http"
	"time"
)

// 传感器数据结构
/*
type SensorData struct {
	DeviceID   string  `json:"device_id"`
	SensorType string  `json:"sensor_type"`
	Value      float64 `json:"value"`
	Unit       string  `json:"unit"`
	Timestamp  string  `json:"timestamp"`
	Quality    int     `json:"quality"`
}
*/

// 认证相关结构
type ChallengeResponse struct {
	ChallengeID string `json:"challenge_id"`
	Nonce       string `json:"nonce"`
	ExpiresAt   string `json:"expires_at"`
}

type VerifyRequest struct {
	DeviceID    string `json:"device_id"`
	ChallengeID string `json:"challenge_id"`
	Proof       struct {
		Proof         string `json:"proof"`
		PublicWitness struct {
			DeviceID   string `json:"device_id"`
			Challenge  string `json:"challenge"`
			Commitment string `json:"commitment"`
			Response   string `json:"response"`
		} `json:"public_witness"`
	} `json:"proof"`
}

type VerifyResponse struct {
	Success   bool   `json:"success"`
	SessionID string `json:"session_id"`
	Token     string `json:"token"`
	ExpiresAt string `json:"expires_at"`
	Message   string `json:"message"`
}

// 设备注册请求
type RegisterRequest struct {
	DeviceID     string `json:"device_id"`
	DeviceType   string `json:"device_type"`
	SensorType   string `json:"sensor_type"`
	CabinetID    string `json:"cabinet_id"`
	PublicKey    string `json:"public_key"` // 可选的公钥
	Commitment   string `json:"commitment"`
	Model        string `json:"model"`
	Manufacturer string `json:"manufacturer"`
	FirmwareVer  string `json:"firmware_ver"`
}

// 设备状态
type DeviceState struct {
	Token       string
	TokenExpiry time.Time
	ChallengeID string
	Nonce       string
}

type HealthClient struct {
	baseURL    string
	httpClient *http.Client
}

// 设备信息结构体
type DeviceInfo struct {
	DeviceID     string     `json:"device_id"`
	DeviceType   string     `json:"device_type"`
	SensorType   string     `json:"sensor_type"`
	CabinetID    string     `json:"cabinet_id"`
	PublicKey    string     `json:"public_key"`
	Commitment   string     `json:"commitment"`
	Status       string     `json:"status"`
	Model        string     `json:"model"`
	Manufacturer string     `json:"manufacturer"`
	FirmwareVer  string     `json:"firmware_ver"`
	CreatedAt    time.Time  `json:"created_at"`
	UpdatedAt    time.Time  `json:"updated_at"`
	LastSeenAt   *time.Time `json:"last_seen_at"`
}

// 设备列表响应结构体
type DeviceListResponse struct {
	Devices []DeviceInfo `json:"devices"`
	Total   int          `json:"total"`
	Page    int          `json:"page"`
	Limit   int          `json:"limit"`
}

// 储能柜信息结构体
type CabinetInfo struct {
	CabinetID    string         `json:"cabinet_id"`
	DeviceCount  int            `json:"device_count"`
	OnlineCount  int            `json:"online_count"`
	OfflineCount int            `json:"offline_count"`
	SensorTypes  map[string]int `json:"sensor_types"`
}

// 储能柜列表响应结构体
type CabinetListResponse struct {
	Cabinets []CabinetInfo `json:"cabinets"`
	Total    int           `json:"total"`
}
